package com.sfac.springboot.modules.common.controller;

import com.sfac.springboot.modules.common.vo.ImageType;
import com.sfac.springboot.modules.common.vo.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description EnumDictionaryController
 * @Author JiangHu
 * @Date 2022/8/23 14:57
 */
@RestController
@RequestMapping("/api")
public class EnumDictionaryController {

	// 将枚举放到一个静态 map 对象中，key 是枚举的名字，value 为枚举类模板
	public static Map<String, Class> map = new HashMap<String, Class>() {{
		put("imageType", ImageType.class);
		put("resultStatus", Result.ResultStatus.class);
	}};

	/**
	 * 127.0.0.1/api/dictionary/imageType ---- get
	 */
	@GetMapping(value = "/dictionary/{enumName}")
	public List<Object> enumDictionary(@PathVariable String enumName) {
		try {
			// 接口将枚举的名字传入，从 map 中获取对应枚举的类模板
			Class clazz = map.get(enumName);
			if (clazz != null) {
				// 通过反射的方式，调用枚举的 values 方法，获得枚举数组
				Method method = clazz.getDeclaredMethod("values");
				Object[] objects = (Object[]) method.invoke(null);

				// 将枚举数组转化为 list 对象，作为接口的返回值
				return Arrays.asList(objects);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
